home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 1 / Gekikoh Dennoh Club Vol. 1 (Japan).7z / Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin / kowin / archive / net / koprosrc.lzh / file.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-03-01  |  2.6 KB  |  148 lines

  1. /*    Copyright 1992 H.Ogasawara(COR.)    */
  2. /*    Customized by T.Umeno(ε-δ) 1992    */
  3. /*#include    <stdio.h>*/
  4. #include    <sys_doslib.h>
  5. #include    <time.h>
  6. #include    <microfio.h>
  7. #include    "run.h"
  8. #include    "tbase.h"
  9.  
  10. unsigned int    filesize,
  11.         filetime;
  12. unsigned char    filename[64];
  13.  
  14. unsigned char    downdir[90]= {'\0'};
  15.  
  16. static unsigned short    readmode= 1;
  17.  
  18. m_file    fm;
  19. int    fp= 0, eof= 0;
  20.  
  21. CloseFile()
  22. {
  23.     if( fp ){
  24.         if( !readmode && filetime ){
  25.             T_BASE    t;
  26.             sectotime( ((int)filetime) - gettz()*60*60, &t );
  27.             Mflush( &fm );
  28.             FILEDATE( fm.fn, ((t.year-1980)<<25)+
  29.                         ((t.month)<<21)+
  30.                         ((t.day)<<16)+
  31.                         ((t.hour)<<11)+
  32.                         ((t.min)<<5)+
  33.                         ((t.sec)/2) );
  34.         }else
  35.             Mflush( &fm );
  36.         Mclose( &fm );
  37.     }
  38.     fp= 0;
  39.     eof= 0;
  40. }
  41.  
  42. unsigned char *
  43. fnamenode( ptr )
  44. unsigned char    *ptr;
  45. {
  46.     unsigned char    *str;
  47.     unsigned short    kanji= 0;
  48.     for( str= ptr ; *ptr ; ptr++ ){
  49.         if( kanji )
  50.             kanji= 0;
  51.         else{
  52.             kanji= iskanji( *ptr );
  53.             if( (*ptr == '/' || *ptr == ':' || *ptr == '\\') && ptr[1] )
  54.                 str= ptr+1;
  55.         }
  56.     }
  57.     return    str;
  58. }
  59.  
  60. static
  61. nameopen( name )
  62. unsigned char    *name;
  63. {
  64.     unsigned char    buf[256];
  65.     if( *downdir ){
  66.         strcpy( buf, downdir );
  67.         strcat( buf, name );
  68.         return    fp= Mcreate( &fm, buf );
  69.     }else if( GETENV( "KOPRO", 0, buf ) >= 0 ){     /* T.Umeno */
  70.         strcat( buf, name );
  71.         return    fp= Mcreate( &fm, buf );
  72.     }
  73.     return    fp= Mcreate( &fm, name );
  74. }
  75.  
  76. OpenFileR( name )
  77. unsigned char    *name;
  78. {
  79.     CloseFile();
  80.     readmode= 1;
  81.     if( !(fp= Mopen( &fm, name )) ){
  82.         allbreak();
  83.         return    0;
  84.     }
  85.     filesize= Mfsize( &fm );
  86.     last= (filesize>>7)+1;
  87.     {
  88.         unsigned int    i= FILEDATE( fm.fn, 0 );
  89.         T_BASE    t;
  90.         t.sec=    (i & 31)*2;
  91.         t.min=    (i>>5) & 63;
  92.         t.hour=    (i>>11) & 31;
  93.         t.day=    ((i>>16) & 31)+1;
  94.         t.month=((i>>21) & 15);
  95.         t.year=    ((i>>25)+1980);
  96.         filetime= timetosec( &t )+ gettz()*60*60;
  97.     }
  98.     return    fp;
  99. }
  100.  
  101. OpenFileW( name )
  102. unsigned char    *name;
  103. {
  104.     CloseFile();
  105.     readmode= 0;
  106.     if( !nameopen( name ) )
  107.         allbreak();
  108.     return    fp;
  109. }
  110.  
  111. WriteFile( buf, wsize )
  112. unsigned char    *buf;
  113. {
  114.     if( filesize > 0 && size+wsize > filesize )    /* 1992 9/15 */
  115.         wsize= filesize-size;
  116.     if( !Mwrite( &fm, buf, wsize ) ){
  117.         allbreak();
  118.         return    -1;
  119.     }
  120.     return    0;
  121. }
  122.  
  123. ReadFile( buf, fsize )
  124. unsigned char    *buf;
  125. {
  126.     if( eof )
  127.         return    -1;    /* EOF */
  128.     if( fsize >= 1024 && filesize-size < 1024 )
  129.         fsize= 128;
  130.     if( Mread( &fm, buf, fsize ) < fsize )
  131.         eof= 1;
  132.     return    fsize;
  133. }
  134.  
  135. /*
  136.     break
  137. */
  138.  
  139. allbreak()
  140. {
  141.     CloseFile();
  142.     runsize= timeout= 0;
  143.     ConsoleOpen();
  144.     ConsolePrint( "kopro: Break!\r\n" );
  145.     EndProgram();
  146. }
  147.  
  148.